using Sandia.MVCFramework.Controller;
using System;
using System.Collections.Generic;
using System.Text;

namespace Sandia.MVCFramework.Plugin
{
    /// <summary>
    /// Interface to be implemented by classes used to load plugins into controllers.
    /// </summary>
    public interface IPluginLoader
    {
        /// <summary>
        /// Load the available plugins into the given controller.
        /// </summary>
        /// <param name="controller">The controller to load the plugins into.</param>
        void LoadPlugins(
            IController controller);

        /// <summary>
        /// Removes all plugins from the given controller.
        /// </summary>
        /// <param name="controller">The controller to remove the plugin from.</param>
        void RemovePlugins(
            IController controller);

        /// <summary>
        /// Load the given plugin into the given controller.
        /// </summary>
        /// <param name="plugin">The plugin to load.</param>
        /// <param name="controller">The controller to load the plugin into.</param>
        void LoadPlugin(
            IPlugin plugin,
            IController controller);

        /// <summary>
        /// Removes the given plugin from the given controller.
        /// </summary>
        /// <param name="plugin">The plugin to remove.</param>
        /// <param name="controller">The controller to remove.</param>
        void RemovePlugin(
            IPlugin plugin,
            IController controller);
    }
}
